package com.xiaoleilu.hutool.util;

/**
 * Hash算法大全<br>
 * 推荐使用FNV1算法
 *
 * @author Goodzzp,Looly
 */
public class HashUtil {

    /**
     * 加法hash
     *
     * @param key 字符串
     * @param prime 一个质数
     * @return hash结果
     */
    public static int additiveHash(String key, int prime) {
        return org.dromara.hutool.core.codec.hash.HashUtil.additiveHash(key, prime);
    }

    /**
     * 旋转hash
     *
     * @param key 输入字符串
     * @param prime 质数
     * @return hash值
     */
    public static int rotatingHash(String key, int prime) {
        return org.dromara.hutool.core.codec.hash.HashUtil.rotatingHash(key, prime);
    }

    /**
     * 一次一个hash
     *
     * @param key 输入字符串
     * @return 输出hash值
     */
    public static int oneByOneHash(String key) {
        return org.dromara.hutool.core.codec.hash.HashUtil.oneByOneHash(key);
    }

    /**
     * Bernstein's hash
     *
     * @param key 输入字节数组
     * @return 结果hash
     */
    public static int bernstein(String key) {
        return org.dromara.hutool.core.codec.hash.HashUtil.bernstein(key);
    }

    /**
     * Universal Hashing
     *
     * @param key 字节数组
     * @param mask 掩码
     * @param tab tab
     * @return hash值
     */
    public static int universal(char[] key, int mask, int[] tab) {
        return org.dromara.hutool.core.codec.hash.HashUtil.universal(key, mask, tab);
    }

    /**
     * Zobrist Hashing
     *
     * @param key 字节数组
     * @param mask 掩码
     * @param tab tab
     * @return hash值
     */
    public static int zobrist(char[] key, int mask, int[][] tab) {
        return org.dromara.hutool.core.codec.hash.HashUtil.zobrist(key, mask, tab);
    }

    /**
     * 改进的32位FNV算法1
     *
     * @param data 数组
     * @return hash结果
     */
    public static int fnvHash(byte[] data) {
        return org.dromara.hutool.core.codec.hash.HashUtil.fnvHash(data);
    }

    /**
     * 改进的32位FNV算法1
     *
     * @param data 字符串
     * @return hash结果
     */
    public static int fnvHash(String data) {
        return org.dromara.hutool.core.codec.hash.HashUtil.fnvHash(data);
    }

    /**
     * Thomas Wang的算法，整数hash
     *
     * @param key 整数
     * @return hash值
     */
    public static int intHash(int key) {
        return org.dromara.hutool.core.codec.hash.HashUtil.intHash(key);
    }

    /**
     * RS算法hash
     *
     * @param str 字符串
     * @return hash值
     */
    public static int rsHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.rsHash(str);
    }

    /**
     * JS算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int jsHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.jsHash(str);
    }

    /**
     * PJW算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int pjwHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.pjwHash(str);
    }

    /**
     * ELF算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int elfHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.elfHash(str);
    }

    /**
     * BKDR算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int bkdrHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.bkdrHash(str);
    }

    /**
     * SDBM算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int sdbmHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.sdbmHash(str);
    }

    /**
     * DJB算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int djbHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.djbHash(str);
    }

    /**
     * DEK算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int dekHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.dekHash(str);
    }

    /**
     * AP算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int apHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.apHash(str);
    }

    /**
     * TianL Hash算法
     * @param str 字符串
     * @return Hash值
     */
    public static long tianlHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.tianlHash(str);
    }

    /**
     * JAVA自己带的算法
     *
     * @param str 字符串
     * @return hash值
     */
    public static int javaDefaultHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.javaDefaultHash(str);
    }

    /**
     * 混合hash算法，输出64位的值
     *
     * @param str 字符串
     * @return hash值
     */
    public static long mixHash(String str) {
        return org.dromara.hutool.core.codec.hash.HashUtil.mixHash(str);
    }
}

